#pragma once

#include "bitboard.h"

// Definuje barvy kamenu
enum CheckerColor: unsigned int {
	WHITE = 0,
	BLACK = 1
};

// Definuje typy kamenu
enum CheckerType: unsigned int {
	NORMAL = 2,
	QUEEN = 4
};

struct Move;
struct Moves;

// Definuje strukturu, do ktere se ukaldaji imformace o rozmisteni kamenu
// na hraci desce
struct Board {
	bitboard NormalCheckers;
	bitboard Queens;

	bitboard Color[2];
	int roundsWithoutCapture;

	Board();

	// Rozestavi kameny do postavni jake maji mit na zacatku hry
	void NewGame();

	// Tiskne rozmisteni kamenu na standartni vystup
	void Print();

	// Provede tah
	void DoMove(Move aMove);
	// Provede tah a pripadne odstrani kamen, ktery neprovedl tah v plnem rozsahu
	bool DoMoveAndCheck(Move aMove); 
	bool DoMoveAndCheck(Move aMove, Moves* moves);
	// Odstani kamen ze zadane pozice
	void RemoveAt(int position);

	unsigned int At(int index);

	// kontroluje zda neni konec hry
	bool IsEndGame(int* winner, CheckerColor playerToPlay);
	bool IsEndGame(int* winner, CheckerColor playerToPlay, Moves* moves);
	// zkontroluje tah
	bool IsValidMove(Move aMove);
	bool IsValidMove(Move aMove, Moves* moves);
private:
	char cAt(int index);
};